package com.dyb.comm.utils;

import cn.hutool.core.util.IdUtil;
import com.google.common.io.Files;
import org.apache.commons.lang3.StringUtils;

/**
 * @author 苦木(kumu)
 * @描述：
 * @注意事项：
 * @e-mail kumu@fudata.cn
 * @date 2022/1/7
 */
public class S3Utils {
    public static String getKey(String remoteId) {
        if (remoteId.startsWith("/")) {
            remoteId = remoteId.replaceFirst("/", "");
        }
        String key = remoteId.substring(remoteId.indexOf("/"));
        if (key.startsWith("/")) {
            key = key.replaceFirst("/", "");
        }
        return key;
    }

    /**
     * 获取桶
     *
     * @param remoteId
     * @return
     */
    public static String getBucket(String remoteId) {
        if (remoteId.startsWith("/")) {
            remoteId = remoteId.replaceFirst("/", "");
        }
        return remoteId.substring(0, remoteId.indexOf("/"));
    }



    /**
     * 转化文件名称
     * 支持文件名称带前缀的方式，方便层级文件夹存储文件
     * 文件路径不变，仅替换文件名称为uuid
     *
     * @param fileName
     * @return
     */
    public static String fileNameToPath(String fileName) {
        String name = IdUtil.fastUUID();
        String ext = Files.getFileExtension(fileName);
        String result = prefixFileName(fileName, name);
        if (StringUtils.isNotEmpty(ext)) {
            result = result + "." + ext;
        }
        return result;
    }

    /**
     * 扩展名随便取名称
     *
     * @param ext 文件后缀
     * @return
     */
    public static String genFileByExt(String ext) {
        String name = IdUtil.fastUUID();
        String result = name;
        if (StringUtils.isNotEmpty(ext)) {
            result = result + "." + ext;
        }
        return result;
    }

    /**
     *  把文件名称替换为uuid
     * @param fileName 带分级文件夹的文件路径，不包含桶名
     * @param name uuid
     * @return 新的文件路径，即不包含桶名的remoteId
     */
    public static String prefixFileName(String fileName, String name){
            int prefixIndexOf = fileName.lastIndexOf('/');
            if (prefixIndexOf != -1){
                return fileName.substring(0, prefixIndexOf + 1) + name;
            } else {
            return name;
        }
    }
}
